package com.tools.controller.login;

import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.tools.common.enums.ResultCode;
import com.tools.common.result.Result;
import com.tools.pojo.login.dto.LoginDTO;
import com.tools.pojo.login.vo.LoginVO;
import com.tools.service.login.LoginService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 登录控制器
 */
@RestController
@AllArgsConstructor
@RequestMapping("/user")
@Tag(name = "登录模块",description = "登录模块")
public class LoginController {

    private final LoginService loginService;

    /**
     * 登录
     * @return 登录结果
     */
    @PostMapping("/login")
    public Result<LoginVO> login(@RequestBody LoginDTO loginDTO) {
        LoginVO loginVO = loginService.login(loginDTO);
        // 2. 执行登录（参数为用户唯一标识，通常为用户ID）
        StpUtil.login(loginVO.getUserId(),"PC");
        SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
        // 4. 可以将用户信息存入Session（可选）
        StpUtil.getSession().set("userInfo", loginVO);
        loginVO.setToken(tokenInfo.getTokenValue());
        return Result.success(loginVO);
    }

    /**
     * 退出登录
     * @return 退出登录结果
     */
    @PostMapping("/logout")
    public Result<Boolean> logout() {
        Boolean b = loginService.logout();
        return b?Result.success():Result.fail(ResultCode.LOGOUT_ERROR);
    }

}
